package com.itheima.Demo03;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

@SuppressWarnings("all")
public class Demo案例 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> list = new ArrayList<>();
        //集合没有控制字符串长度的能力,我们用代理自己完成一个功能,只允许添加四字字符串
        List<String> list2 = (List<String>) Proxy.newProxyInstance(list.getClass().getClassLoader(), list.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                //判断调用的是不是添加方法
                if (method.getName().equals("add")) {
                    //判断是不是参数四个字,0号索引位置的字符串;
                    String str = (String) objects[0];
                    if (str.length() != 4) {
                        //声明异常;
                        throw new RuntimeException("只能添加长度为4的字符串!!");
                    }
                }
                //其他情况就让方法正常执行;
                Object invoke = method.invoke(list, objects);
                return invoke;
            }
        });
        //当使用代理对象做添加操作时,只能添加四字字符串
        list2.add("大桥未久");
        list2.add("波多野结衣");
        list2.add("苍井空");
        list2.add("中港国际");
        System.out.println(list);
    }
}
